Simulation is a process that attempts to predict aspects of the behavior of a system by creating an approximate, typically mathematical, model of the system. Computers provide an ideal environment for building simulations.
Simulators have many uses. For example, businesses use simulations to develop optimized processes such as staffing decisions or inventory management. Simulations also lower the risks associated with critical decisions by enabling analysis of influences to a system output. Engineers also use simulations to prototype and test designs.
However, simulations require an investment in tools, time, and people. Simulation tools can include spreadsheets, programming languages, and full-featured commercial simulation packages. Each of the currently available simulation tools have associated tradeoffs. Spreadsheets, for example, offer low purchase cost, but limited built-in functionality. Similarly, traditional programming languages provide maximum flexibility, but can require much time and skill to maintain and operate.
Both spreadsheets and programming languages can require extensive programming, and spreadsheets can be too slow for complex situation modeling where thousands of items are required to be simulated. General-purpose commercial simulation tools provide sophisticated built-in capabilities combined with graphical development environments, which may save time, but can also be very expensive. The initial price of general-purpose commercial simulation tools and/or licenses for such tools can run into tens of thousands of dollars per year. Such commercial simulation tools exist for specific applications such as supply chain management, resource management, manufacturing, and science.
All of these simulation tools have additional drawbacks. For instance, tool vendors can go out of business or be purchased by larger firms who significantly modify or discontinue a product line. The simulation tools may also not scale to handle highly sophisticated business processes. In addition, the programming languages underlying the tools can be obscure enough that the learning curve becomes high, and only a few people within a given organization become skilled in their use. Another drawback to currently available simulation tools is that there are no widely adopted standards for interchanging simulations developed in different tools, making it difficult to reuse the same simulation models.
Conventional simulation tools that support parallel processing or distribution are often not general-purpose, are very expensive, or require extremely advance programming in order to realize their potential. Further, without simulation support software, simulations developed in programming languages can lead to awkward programming. Even with a simulation engine, programming language solutions do not usually provide a natural way of describing hundreds or thousands of inter-connected objects of various types. Using traditional database management systems to store objects typically leads to simulations that run too slowly for practical use.
Simulations also inherently pose computing challenges. For example, simulations typically need to represent large numbers of inter-related objects in relationship to each other, and need to manipulate these objects at high speeds. Thus, unlike a traditional business program, a simulation may require a large amount of computing speed and memory. Due to the iterative process of simulation, modelers and other users need a way to easily repeat a simulation run with varying random number seeds and must be able to combine the results. Likewise, modelers need the ability to repeat simulation runs while systematically varying one or more parameters. Users of simulations also desire the ability to watch, freeze, reverse, and snapshot a simulation.
Thus, there exists a need for a low cost, easy to program, platform-independent, reusable, standards-based, and graphics-based simulation system and method.